package com.learn.boot.datasource.config;

import lombok.extern.slf4j.Slf4j;

/**
 * 创建一个类用于实现ThreadLocal，主要是通过get，set，remove方法来获取、设置、删除当前线程对应的数据源。
 *
 * @author: MI
 * @email: 448341911@qq.com
 * @createTime: 2023/12/16 12:11
 * @updateUser: cong zhi
 * @updateTime: 2023/12/16 12:11
 * @updateRemark: 修改内容
 * @version: v1.0
 */
@Slf4j
public class DataSourceContextHolder {
    /**
     * 此类提供线程局部变量。这些变量不同于它们的正常对应关系是每个线程访问一个线程(通过get、set方法),有自己的独立初始化变量的副本。
     */
    private static final ThreadLocal<String> DATASOURCE_HOLDER = new ThreadLocal<>();


    /**
     * 设置数据源
     *
     * @param dataSourceName 数据源名称
     */
    public static void setDataSource(String dataSourceName) {
        DATASOURCE_HOLDER.set(dataSourceName);
        log.info("已切换到数据源:{}",dataSourceName);
    }

    /**
     * 获取当前线程的数据源
     *
     * @return 数据源名称
     */
    public static String getDataSource() {
        return DATASOURCE_HOLDER.get();
    }

    /**
     * 删除当前数据源
     */
    public static void removeDataSource() {
        DATASOURCE_HOLDER.remove();
        log.info("已切换到主数据源");
    }

}
